package com.yww.leetcode2.string;

/**
 * @author yww
 * @description 541. 反转字符串 II
 * @since 2024/11/18
 */
public class ReverseStr541_02 {
    // 给定一个字符串 s 和一个整数 k，从字符串开头算起，每计数至 2k 个字符，就反转这 2k 字符中的前 k 个字符。
    // 如果剩余字符少于 k 个，则将剩余字符全部反转。
    // 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
    public String reverseStr(String s, int k) {
        char[] array = s.toCharArray();
        for (int i = 0; i < array.length; i += 2 * k) {
            if (i + k <= array.length) {
                reverse(array, i, i + k - 1);
                continue;
            }
            reverse(array, i, array.length - 1);
        }
        return new String(array);
    }

    public void reverse(char[] s, int begin, int end) {
        for (; begin < end; begin++, end--) {
            swap(s, begin, end);
        }
    }

    public void swap(char[] s, int i, int j) {
        char temp = s[i];
        s[i] = s[j];
        s[j] = temp;
    }

    public static void main(String[] args) {
        String abcdefg = new ReverseStr541_02().reverseStr("abcdefg", 2);
        System.out.println(abcdefg);
    }

}
